<script type="text/javascript">
	function pasarVariables(pagina, nombres) {
  pagina +="?";
  nomVec = nombres.split(",");
  for (i=0; i<nomVec.length; i++)
    pagina += nomVec[i] + "=" + escape(eval(nomVec[i]))+"&";
  pagina = pagina.substring(0,pagina.length-1);
  location.href=pagina;
}
</script>
<div class="content clear-block">
	<h2>Cap&iacute;tulo 7 Introduccion SQL</h2>
<br /><br />
<p class="definicion" align="justify">
Vamos a hacer un repaso b&aacute;sico de algunas sentencias de SQL, Insert, Update y Delete.
</p><br />
<h3>INSERT</h3>
<br /><p class="definicion" align="justify">
La sintaxis mas conocida del insert es:
</p>
<center><img src="ORACLELIFE_files/images/oca_cap7_insert.jpg" alt="EnterPrise Manager" /></center>
<p class="definicion" align="justify">
Podemos insertar nosotros directamente los valores:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql >INSERT INTO MOGU.PRUEBA1 (ID_PRUEBA, NOMBRE) VALUES (22,'SYS');
</p></pre></blockquote>
<p class="definicion" align="justify">
O insertar los valores que nos devuelve una quiery:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql > INSERT INTO MOGU.PRUEBA1 (ID_PRUEBA, NOMBRE) SELECT 3, NOMBRE FROM MOGU.PRUEBA1 WHERE ID_PRUEBA=22;
</p></pre></blockquote>
<p class="definicion" align="justify">
Una cosa que seguramente muchos de nosotros no sepais es que con una unica sentencia de insert podemos insertar en varias tablas diferentes:
</p>
<center><img src="ORACLELIFE_files/images/oca_cap7_insert2.jpg" alt="EnterPrise Manager" /></center>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql> INSERT FIRST
   WHEN policy_type = 'P' THEN
INTO property_premium_fact(policy_id,policy_nbr ,premium_amt)
   VALUES (property_premium_seq.nextval,policy_number ,gross_premium)
   WHEN p.policy_type = 'C' THEN
INTO property_premium_fact(policy_id,policy_nbr ,premium_amt)
  VALUES (property_premium_seq.nextval,policy_number ,gross_premium)
SELECT policy_nbr ,gross_premium ,policy_type 
FROM policies
WHERE policy_date >=TRUNC(SYSDATE,'MM') - TO_YMINTERVAL('00-01');
</p></pre></blockquote>
<p class="definicion" align="justify">
Como vemos en la sintaxis que se muestra en la imagen, aparecen las clausulas FIRST y ALL. Con ALL Oracle evalua cada uno de las condiciones WHEN mientras que con FIRST hara el insert en la primera sentencia que cumpla la condicion WHEN.
</p>
<h3>UPDATE</h3>
<p class="definicion" align="justify">
La sintaxis de UPDATE es:
</p>
<center><img src="ORACLELIFE_files/images/oca_cap7_update.jpg" alt="EnterPrise Manager" /></center>
<p class="definicion" align="justify">
En el update podemos directamente insertar nosotros los valores separados por comas:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql > UPDATE MOGU.PRUEBA1 SET ID_PRUEBA=0, NOMBRE='NULO' WHERE MOD(ID_PRUEBA,2)=0;
</p></pre></blockquote>
<p class="definicion" align="justify">
O utilizando el resultado de una query:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre><p>
sql > UPDATE MOGU.PRUEBA1 SET (ID_PRUEBA,NOMBRE)=(SELECT SUM(ID_PRUEBA),'MODIFICADO' FROM MOGU.PRUEBA1) WHERE ID_PRUEBA=0;
</p></pre></blockquote>
<h3>DELETE</h3>
<p class="definicion" align="justify">
La sintaxis de delete la mostramos en la siguiente imagen:
</p>
<center><img src="ORACLELIFE_files/images/oca_cap7_delete.jpg" alt="EnterPrise Manager" /></center>
<p class="definicion" align="justify">
Os pongo un ejemplo que seguramente os resultara muy util. Os eliminara los ids duplicados de una tabla.
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql > DELETE MOGU.PRUEBA3 WHERE ROWID NOT IN (SELECT MAX(ROWID) FROM MOGU.PRUEBA3 GROUP BY ID_PRUEBA);
</p></pre></blockquote>
<p class="definicion" align="justify">
Si queremos borrar todas las filas de una tabla podemos optar por dos soluciones:
</p>
<blockquote style="COLOR: #2e5348; FONT-SIZE: 12px; FONT-WEIGHT: bold FONT:Arial, Helvetica, sans-serif"><pre>
<p>sql > DELETE FROM MOGU.PRUEBA1;
sql > TRUNCATE TABLE MOGU.PRUEBA1;
</p></pre></blockquote>
<p class="definicion" align="justify">
Con la consideraci&oacute;n que TRUNCATE al ser una sentencia DDL no soporta ROLLBACK;
</p>
</div>